package es.ucm.fdi.lps.abadia.motor;

import static es.ucm.fdi.lps.abadia.general.Mensajes.*;

/**
 * Esta clase contiene toda la informacion relativa a las misas del juego
 * @author Sotomayor
 *
 */
public class Misas{
	/**
	 * Variable que guarda la misa actual del juego
	 */
    private ConjuntoMisas actual; 
    
    /**
     * Conjunto contenedor de todas las misas del juego
     */
    private ConjuntoMisas[] conjuntoMisas;
    
    /**
     * duracion de la misa en turnos
     */
    private int duracionMisa;
    
    
    /**
     * Constructor parametrizado
     * @param duracionMisa, duracion de la misa en turnos
     */
    public Misas(int duracionMisa){
            conjuntoMisas = ConjuntoMisas.values();
            actual = conjuntoMisas[0];
            this.duracionMisa = duracionMisa;
    }
    
    /**
     * Devuelve la misa actual del juego
     * @return actual
     */
    public ConjuntoMisas dameMisa(){
    	return actual;
    }
    
    
    /**
     * cambia la misa actual por la siguiente correspondiente de la lista
     */
    public void SiguienteMisa(){
    		actual = conjuntoMisas[(actual.ordinal()+1) % conjuntoMisas.length];
    }

    /**
     * Devuelve la duracion de la misa
     * @return duracionMisa
     */
    public int dameDuracionMisa(){
            return duracionMisa;
    }
    
    /**
     * Devuelve la misa inicial del juego
     * @return conjuntoMisas[0]
     */
    public ConjuntoMisas dameMisaInicial(){
    		return conjuntoMisas[0];	
    }
   
    
    
     /**
      * Enumerado que representa el conjunto de misas del juego
      */
    private enum ConjuntoMisas {
            MAITINES(MISA_MAITINES,0), 
            LAUDES(MISA_LAUDES,1), 
            PRIMA(MISA_PRIMA,2), 
            TERCIA(MISA_TERCIA,3), 
            SEXTA(MISA_SEXTA,4), 
            NONA(MISA_NONA,5), 
            VISPERAS(MISA_VISPERAS,6), 
            COMPLETAS(MISA_COMPLETAS,7);

            /**
             * Nombre misa
             */
        	private String nombre;
        	
        	/**
        	 * Identificador misa
        	 */
        	private int id;

        	// El constructor es privado para que no lo puedan usar otras clases.
        	private ConjuntoMisas(String nombre, int id){
                if (nombre == null)
                    throw new IllegalArgumentException("No se puede crear una misa de nombre nulo.");
        		this.nombre = nombre;
        		this.id=id;
        	}

    
     
    }
}
